//题目描述
//有一个箱子容量为 V，同时有 n 个物品，每个物品有一个体积。
//现在从 n 个物品中，任取若干个装入箱内（也可以不取），使箱子的剩余空间最小。输出这个最小值。
//输入格式
//第一行共一个整数 V，表示箱子容量。
//第二行共一个整数 n，表示物品总数。
//接下来 n 行，每行有一个正整数，表示第 i 个物品的体积。
//输出格式
//共一行一个整数，表示箱子最小剩余空间。
//输入输出样例
//输入 
//24
//6
//8
//3
//12
//7
//9
//7
//输出 
//0
//说明 / 提示
//对于 100 % 数据，满足 0 < n≤30，1≤V≤20000。
//【题目来源】
//NOIP 2001 普及组第四题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll v[35],dp[20005];
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int V, n; cin >> V >> n;
	for (int i = 1; i <= n; i++)cin >> v[i];
	for (int i = 1; i <= n; ++i) {
		for (int j = V; j >= v[i]; --j) {
			dp[j] = max(dp[j], dp[j - v[i]] + v[i]);
		}
	}
	cout << V - dp[V];
	return 0;
}//二维做法
//
//ll v[35], dp[35][20005];
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int V, n; cin >> V >> n;
//	for (int i = 1; i <= n; i++)cin >> v[i];
//	for (int i = 1; i <= n; ++i) {
//		for (int j = 0; j <= V; ++j) {
//			if (j >= v[i])dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + v[i]);
//			else dp[i][j] = dp[i - 1][j];
//		}
//	}
//	cout << V - dp[n][V];
//	return 0;
//}